package com.chunlin.stack;

import java.util.Stack;

public class StackTest {
    public static void test1() {
        Stack<Integer> stack = new Stack<>();
        stack.add(1);
        stack.add(2);
        stack.add(3);
        stack.add(4);

        stack.add(0, 1);
        stack.add(2, 1);
        System.out.println(stack);

        //Java 中的 Stack 类继承自 Vector，导致它具有 Vector 的所有方法，可能会引发误操作。现代 Java 开发中更推荐使用 Deque 接口及其实现类（如 ArrayDeque）来实现栈
        //C++：C++ 中的 std::stack 是一个容器适配器，只提供栈相关的方法，没有暴露底层容器的方法，因此更符合栈的设计，避免了误操作的风险
        //通过这种设计，C++ 中的 std::stack 更专注于栈的语义，而不会因为继承其他容器类带来不必要的方法，从而保持了接口的简洁和安全
        Stack<Integer> stack1 = new Stack<>();
        stack1.push(1);
        stack1.push(2);
        stack1.push(3);
        stack1.push(4);

        System.out.println(stack1.size()); // 获取栈中有效元素个数---> 4
        System.out.println(stack1.peek()); // 获取栈顶元素---> 4
        stack1.pop(); // 4出栈，栈中剩余1 2 3，栈顶元素为3
        System.out.println(stack1.pop());  // 3出栈，栈中剩余1 2 栈顶元素为2
        if (stack1.empty()) {
            System.out.println("栈空");
        } else {
            System.out.println(stack1.size());
        }
    }


    public static void main(String[] args) {
        test1();
    }
}
